<?php
/**
 * Online User Show
 *
 * @author   Avenger <avenger@php.net>
 * @version  $Id 2003-04-11 19:07:51 $
 */

error_reporting(0);

/*
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Expires: " .gmdate ("D, d M Y H:i:s", time() + 20). " GMT");
header("Cache-control: max-age=20");
*/

$datafile       = 'online.dat';         // 数据文件，如果是linux/unix系统，需要把文件属性设置为777或者666
$onlineTime     = 900;                  // 在线的时间差秒数，这里设置为10分钟

$timestamp      = time();               // 取得当前的Unix时间戳
$dat            = file($datafile);      // 将数据文件读入数组
$count          = count($dat);          // 取得当前的数据记录数目
$onlineCount    = 1;                    // 在线人数，起始就是1，当前的请求者自己
$insertMe       = true;                 // 判断是否要插入当前请求者的记录，如果当前数据中没有此IP的记录就加入

$ip = $_SERVER['HTTP_X_FORWARDED_FOR'] ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];

for($i = 0; $i < $count; $i++) {
    $dat[$i] = chop($dat[$i]);  // 去处记录尾部的\n
    list($ipadd, $requestUri, $lastRequest) = explode('│', $dat[$i]);   // 取得数据
    if($ipadd == $ip) {                    // 如果IP和当前请求者的IP一致，就更新Unix时间戳
        $dat[$i] = $ipadd.'│'.$requestUri.'│'.$timestamp."\n";
        $insertMe = false;
    } else {
        // 如果IP和当前请求者IP不一致，那么判断是否在线
        if($lastRequest < ($timestamp - $onlineTime)) {
            // 不在线，删除本条数据记录
            $dat[$i] = '';
        } else {
            // 在线，加上尾部的\n
            $dat[$i] .= "\n";
            $onlineCount++; // 在线人数加1
        }
    }
}

// 用Javascript输出结果
if ($_GET['show']) echo 'document.write("Online:'.$onlineCount.'");';

// 将新的数据整合成为字符串
$newDat = join('', $dat);
if($insertMe) {
    // 判断是否需要加入当前请求者的记录
    $newDat .= $ip.'│'.$_SERVER['REQUEST_URI'].'│'.$timestamp."\n";
}

// 写入数据文件
$fp = fopen($datafile, 'w');
fwrite($fp, $newDat);
fclose($fp);

if ($_GET['show']) exit;
return;
?>
data = '&referer='+escape(document.referrer)+'&url='+escape(document.location);
document.write('<iframe style="display:none" MARGINWIDTH=0 MARGINHEIGHT=0 HSPACE=0 VSPACE=0 FRAMEBORDER=0 SCROLLING=no height=1 width=1 src=/online_data.php?a=1'+data+'></iframe>');
